/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clientegestionred;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.smi.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;
/**
 *
 * @author manolo
 */
public class infoTCP {

private String address; //direccion del agente SNMP.
    private static Snmp snmp; //objeto para la comunicacion SNMP con el agente.

    private static final OID  tcpRtoMin = new OID ("1.3.6.1.2.1.6.2.0");
    private static final OID tcpRtoMax = new OID("1.3.6.1.2.1.6.3.0");
    private static final OID tcpInSegs = new OID("1.3.6.1.2.1.6.10.0");
    private static final OID tcpOutSegs = new OID("1.3.6.1.2.1.6.11.0");
    private static final OID tcpRetransSegs = new OID("1.3.6.1.2.1.6.12.0");
    private static final OID udpInDatagrams = new OID("1.3.6.1.2.1.7.1.0");
    private static final OID udpNoPorts = new OID("1.3.6.1.2.1.7.2.0");
    private static final OID udpOutDatagrams = new OID("1.3.6.1.2.1.7.4.0");

    private Variable [] response=new Variable []{}; //objeto que almacena las respuestas de consulta.

    /* Constructor */
    public infoTCP(String address) {
        super();
        this.address = address;
    }

        public static void main(String args[]) throws IOException{
        infoTCP prueba = new infoTCP("udp:127.0.0.1/161");
        prueba.start();
    }
        private void start() throws IOException{

        TransportMapping transport = new DefaultUdpTransportMapping();
        snmp = new Snmp(transport);
        transport.listen();
        Consulta consulta = new Consulta(snmp,address);
        imprimeTCP(consulta);
        imprimeUDP(consulta);

        } //Start


    //Muestra la informacion de UDP
        /////////////////////
    public void imprimeUDP(Consulta consulta) throws IOException{

        System.out.println("A continuacion se muestra información UDP");
        System.out.flush();
        OID[] oids = new OID[]{udpInDatagrams, udpNoPorts, udpOutDatagrams};
        response = consulta.get(oids);

         System.out.println("\t Número de Datagramas recibidos "
                 +response[0].toString());
         System.out.println("\t Número de Datagramas enviados "
                 +response[2].toString());
         System.out.println("\t Número de Datagramas recibidos sin aplicación "+
                 "en el puerto destino "+response[1].toString());


    }
        //Muestra la informacion de TCP
    /////////////////////////////////////////
    public void imprimeTCP(Consulta consulta) throws IOException{
        System.out.println("A continuacion se muestra información TCP");
        System.out.flush();
        OID[] oids = new OID[]{tcpRtoMin, tcpRtoMax, tcpInSegs, tcpOutSegs,
        tcpRetransSegs};
        response = consulta.get(oids);
        String In = response[2].toString();
        String Out = response[3].toString();
        String Retrans = response[4].toString();
         System.out.println("\t Tiempo mínimo de respuesta "+response[0].toString()+
                 "(ms)");

         System.out.println("\t Tiempo máximo de respuesta "+response[1].toString()+
                 "(ms)");

         System.out.println("\t Información total recibida: "+miraByte(In));

         System.out.println("\t Información total enviada: "+miraByte(Out));

         System.out.println("\t Información que fue retransmitida: "+miraByte(Retrans));


    } //ImprimeTCP

    //Pone la unidad correcta de bytes
    ///////////////////////////////
    public String miraByte(String bytes){
            int n = Integer.parseInt(bytes);
            if(n < 1024)
            {
                String resultado = n+ " bytes";
                return resultado;
            }
            else{
                    if(n< 1048576)
                    {
                        double h= (double)n/1024;
                        String resultado = h+ " Kbytes";
                        return resultado;
                    }
                        double h = (double)n/1048576;
                        String resultado = h+ " Mbytes";
                        return resultado;
            }


    }//miraByte



}//infoTCP
